﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
//1.int fputc (int c, FILE *stream),向文件中写入一个字符
//int main()
//{
//	//打开文件
//	FILE* pf = fopen("text.txt", "w");
//	//判断其是否为空值
//	if (pf == NULL)
//		perror("fopen:");
//	//写入文件
//	int ret = fputc('c', pf); //字符必须是双引号
//	for (int i = 'a'; i <= 'z'; i++)
//		fputc(i, pf);
//	printf("%c", ret);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//2.int fgetc( FILE *stream );向文件中读取一个字符
//int main()
//{
//	//打开文件
//	FILE* pf = fopen("text.txt", "r");
//	//判断文件是否存在
//	if (pf == NULL)
//		perror("fopen:");
//	//读取文件
//	int ch = fgetc(pf);
//	printf("%d\n", ch);
//
//	ch = fgetc(pf);
//	printf("%d\n", ch);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	//打开文件
//	FILE* pf = fopen("text.txt", "r");
//	//判断文件是否存在
//	if (pf == NULL)
//		perror("fopen:");
//	//读取文件
//	int ch = 0;
//	while ((ch = fgetc(pf)) != EOF)
//		printf("%c", ch);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}



//int fputs( const char *string, FILE *stream );
//int main()
//{
//	//打开文件
//	FILE* pf = fopen("text.txt", "w");
//	if (pf == NULL)
//		perror("fopen:");
//	//写入文件
//	int ret = fputs("hello world\n", pf);
//	int ret1 = fputs("hello bite", pf);
//	printf("%d", ret);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//char *fgets( char *string, int n, FILE *stream );
//ps如下
//1.fgets的参数20表示读19个字符，还有一个必须留给'\0'
//2.每次读，只会读取一行
//3.在循环时，无论设置读取的长度，它都会全部读出来
//int main()
//{
//	//打开文件
//	FILE* pf = fopen("text.txt", "r");
//	if (pf == NULL)
//		perror("fopen:");
//
//	//读取文件
//	char arr[50] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
//	while (fgets(arr, 5, pf) != NULL)
//		printf("%s", arr);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int fprintf( FILE *stream, const char *format [, argument ]...);
//struct S
//{
//	char name[20];
//	int age;
//	float height;
//};
//int main()
//{
//	//打开文件
//	FILE* pf = fopen("text.txt", "w");
//	if (pf == NULL)
//		perror("fopen:");
//	//初始化结构体
//	struct S s = { "朱钱",20,171.12f };
//
//  //想把结构体中的数据放到文件中
//	fprintf(pf, "%s %d %f", s.name, s.age, s.height);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int fscanf( FILE *stream, const char *format [, argument ]... );
//struct S
//{
//	char name[20];
//	int age;
//	float height;
//};
//int main()
//{
//	//打开文件
//	FILE* pf = fopen("text.txt", "r");
//	if (pf == NULL)
//		perror("fopen:");
//	//初始化结构体
//	struct S s = { 0 };
//	
//	//想从文件中读取文件放到s中
//	fscanf(pf, "%s %d %f", s.name, &(s.age) , &(s.height));
//	printf("%s %d %f", s.name, s.age, s.height);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//int fprintf( FILE *stream, const char *format [, argument ]...);
//struct S
//{
//	char name[20];
//	int age;
//	float height;
//};
//int main()
//{
//	//打开文件
//	FILE* pf = fopen("text.txt", "w");
//	if (pf == NULL)
//		perror("fopen:");
//	//初始化结构体
//	struct S s = { "朱钱",20,171.12f };
//
//  //想把结构体中的数据放到文件中
//	fprintf(stdout, "%s %d %f", s.name, s.age, s.height);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	fputc('a', stdout);
//	return 0;
//}


//fwrite,将一个数组写入到文件中
//int main()
//{
//	int arr[] = { 1,2,3,4,5,25};
//	FILE* pf = fopen("text.txt", "wb");
//	if (pf == NULL)
//		perror("fopen>");
//	//文件操作
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	fwrite(arr, sizeof(int), sz, pf);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

////使用fread函数将文件中二进制数输入出来
//int main()
//{
//	int arr[6] = { 0 };
//	FILE* pf = fopen("text.txt", "rb");
//	if (pf == NULL)
//	{
//		perror("fopen>");
//		return 1;
//	}
//	//文件操作
//
//	int i = 0;
//	fread(arr, sizeof(arr[0]), 6, pf);
//	for (i = 0; i < 6; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//int main()
//{
//	int arr[20] = { 0 };
//	FILE* pf = fopen("text.txt", "rb");
//	if (pf == NULL)
//	{
//		perror("fopen>");
//		return 1;
//	}
//	//文件操作
//	int i = 0;
//	while (fread(arr+i, sizeof(arr[0]), 1, pf))
//	{
//		printf("%d ", *(arr+i));
//		i++;
//	}
//
//	printf("\n");
//
//	for (int i = 0; i < 6; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//fseek函数的学习，作用，———— 用于改变光标位置
//int main()
//{
//	//打开文件
//	FILE* pf = fopen("text.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen>");
//		return 1;
//	}
//	//文件操作
//	int ret = fgetc(pf);
//	printf("%c\n", ret);
//
//	//此时我需要读到f，就的使用fseek来改变光标位置
//	fseek(pf, 4, SEEK_CUR);
//	ret = fgetc(pf);
//	printf("%c\n", ret);
//	//此时我想要读到a，该怎么搞呢？
//	fseek(pf, -6, SEEK_END);
//	ret = fgetc(pf);
//	printf("%c\n", ret);
//
//	
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//ftell函数的学习,作用————返回当前光标相较于起始位置的偏移量
//int main()
//{
//	//打开文件
//	FILE* pf = fopen("text.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen>");
//		return 1;
//	}
//	//文件操作
//	int ret = fgetc(pf);
//	printf("%c\n", ret);
//
//	//此时我需要读到f，就的使用fseek来改变光标位置
//	fseek(pf, 4, SEEK_CUR);
//	ret = fgetc(pf);
//	printf("%c\n", ret);
//	//此时我想要读到a，该怎么搞呢？
//	fseek(pf, -3, SEEK_END);
//	ret = fgetc(pf);
//	printf("%c\n", ret);
//
//	printf("%d\n", ftell(pf));
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//rewind函数的学习,作用————返回当前光标相较于起始位置的偏移量
//int main()
//{
//	//打开文件
//	FILE* pf = fopen("text.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen>");
//		return 1;
//	}
//	//文件操作
//	int ret = fgetc(pf);
//	printf("%c\n", ret);
//
//	//此时我需要读到f，就的使用fseek来改变光标位置
//	fseek(pf, 4, SEEK_CUR);
//	ret = fgetc(pf);
//	printf("%c\n", ret);
//	//此时我想要读到a，该怎么搞呢？
//	fseek(pf, -3, SEEK_END);
//	ret = fgetc(pf);
//	printf("%c\n", ret);
//
//	printf("%d\n", ftell(pf));
//
//	rewind(pf);
//	ret = fgetc(pf);
//	printf("%c\n", ret);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//文件读取结束时的判断,feof函数当⽂件读取结束的时候，判断读取结束的原因是否是：遇到⽂件尾结束。
//int main()
//{
//	//打开文件
//	FILE* pf = fopen("text.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen>");
//		return 1;
//	}
//	//文件操作
//	int ret = 0;
//	while ((ret = fgetc(pf)) != EOF)
//	{
//		printf("%c\n", ret);
//	}
//	if (feof(pf))
//	{
//		printf("遇到文件末尾，读取正常结束！");
//	}
//	else if (ferror(pf))
//	{
//		perror("fgetc>");
//	}
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//
//int main()
//{
//	//打开文件
//	FILE* pf = fopen("text.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen>");
//		return 1;
//	}
//	//文件操作
//
//	for (char i = 'a'; i <= 'z'; i++)
//	{
//		fputc(i, pf);
//	}
//	if (feof(pf))
//	{
//		printf("遇到文件末尾，读取正常结束！");
//	}
//	else if (ferror(pf))
//	{
//		perror("fputc>");
//	}
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//文件的拷贝
int main()
{
	//打开第一个文件
	FILE* pf_origin = fopen("text.txt", "r");
	if (pf_origin == NULL)
	{
		perror("fopen1>");
		return 1;
	}
	//打开第二个文件
	FILE* pf_dest = fopen("text1.txt", "w");
	if (pf_dest == NULL)
	{
		fclose(pf_origin);
		pf_origin = NULL;
		perror("fopen2>");
		return 1;
	}
	int ret = 0;
	while ((ret = fgetc(pf_origin)) != EOF)
	{
		fputc(ret,pf_dest);
	}
	
	//关闭两个文件
	fclose(pf_origin);
	pf_origin = NULL;
	fclose(pf_dest);
	pf_dest = NULL;
	return 0;
}